#include "msgdadosresultantes.h"
#include <iostream>

MsgDadosResultantes::MsgDadosResultantes(Gtk::Window& win):
	parent(win)
{
	
}

void MsgDadosResultantes :: update(){
	BuzonDeMensajes* bm = dynamic_cast<BuzonDeMensajes*>(this->observable);
		if(bm != 0){
			Mensaje* msg = bm->getUltimo();
			MensajeMostrarDados* msgDados = dynamic_cast<MensajeMostrarDados*>(msg);
			if(msgDados != 0){
				int dadosAtacante[3];
				list<Dado*> lDados = msgDados->getDadosAtacante();
				list<Dado*>::iterator it;
				int i = 0;
				for(it = lDados.begin(); it != lDados.end(); it++){
					Dado* d = *it;
					dadosAtacante[i] = d->getValor();
					i++;
				}
				for(; i < 3; i++){
					dadosAtacante[i] = 0;
				}
				int dadosDefensor[2];
				list<Dado*> lDadosD = msgDados->getDadosDefensor();
				list<Dado*>::iterator itDef = lDadosD.begin();
				int j = 0;
				for(itDef = lDadosD.begin(); itDef != lDadosD.end(); itDef++){
					Dado* d = *itDef;
					dadosDefensor[j] = d->getValor();
					j++;
				}
				for(; j < 2; j++){
					dadosDefensor[j] = 0;
				}
				msgResultadoDados(dadosAtacante[0],dadosAtacante[1],dadosAtacante[2],
						dadosDefensor[0],dadosDefensor[1],
						msgDados->getAtacante(), msgDados->getDefensor());
				
				//delete
				list<Dado*>::iterator itDelete;
				for(itDelete = lDados.begin(); itDelete != lDados.end(); itDelete++){
					Dado* d = *itDelete;
					delete(d);
				}
				for(itDelete = lDadosD.begin(); itDelete != lDadosD.end(); itDelete++){
					Dado* d = *itDelete;
					delete(d);
				}
			}
		}
}

int MsgDadosResultantes :: msgResultadoDados(int da1, int da2, int da3, int dd1, int dd2, string pAtacante, string pDefensor){
	
	cout<<"dados atacante"<<endl;
	cout<<da1<<endl;
	cout<<da2<<endl;
	cout<<da3<<endl;
	cout<<"dados defensor"<<endl;
	cout<<dd1<<endl;
	cout<<dd2<<endl;
	
	Gtk::Dialog dialog("Resultado del ataque", parent);
	dialog.set_modal(false);
	Gtk::Label lAtacante(pAtacante);
	Gtk::Label lDefensor(pDefensor);
	Gtk::HSeparator hs1,hs2,hs3,hs4,hs5,hs6;
	Gtk::VSeparator vs1;
	
	
	Gtk::HBox hBox;
	Gtk::VBox vAtacante, vDefensor;
	
	vAtacante.pack_start(lAtacante,true,true,0);
	Gtk::Image iDadoAtacante1, iDadoAtacante2,iDadoAtacante3, iDadoDefensor1, iDadoDefensor2;
	
	if(dadoSeleccionado(da1) != "0"){
	Glib::RefPtr<Gdk::Pixbuf> pixDA1 = Gdk::Pixbuf::create_from_file(dadoSeleccionado(da1));
	iDadoAtacante1.set(pixDA1);
	
	vAtacante.pack_start(hs1,true,true,5);
	vAtacante.pack_start(iDadoAtacante1,true,true,0);
	}
	
	if(dadoSeleccionado(da2) != "0"){
	Glib::RefPtr<Gdk::Pixbuf> pixDA2 = Gdk::Pixbuf::create_from_file(dadoSeleccionado(da2));
	iDadoAtacante2.set(pixDA2);
	
	vAtacante.pack_start(hs2,true,true,5);
	vAtacante.pack_start(iDadoAtacante2,true,true,0);
	}
	
	if(dadoSeleccionado(da3) != "0"){
	Glib::RefPtr<Gdk::Pixbuf> pixDA3 = Gdk::Pixbuf::create_from_file(dadoSeleccionado(da3));
	iDadoAtacante3.set(pixDA3);
	
	vAtacante.pack_start(hs3,true,true,5);
	vAtacante.pack_start(iDadoAtacante3,true,true,0);
	}
	
	vDefensor.pack_start(lDefensor);
	if(dadoSeleccionado(dd1) != "0"){
	Glib::RefPtr<Gdk::Pixbuf> pixDD1 = Gdk::Pixbuf::create_from_file(dadoSeleccionado(dd1));
	iDadoDefensor1.set(pixDD1);
	
	vDefensor.pack_start(hs4,true,true,5);
	vDefensor.pack_start(iDadoDefensor1,true,true,0);
	}
	
	if(dadoSeleccionado(dd2) != "0"){
	Glib::RefPtr<Gdk::Pixbuf> pixDD2 = Gdk::Pixbuf::create_from_file(dadoSeleccionado(dd2));
	iDadoDefensor2.set(pixDD2);
	
	vDefensor.pack_start(hs5,true,true,5);
	vDefensor.pack_start(iDadoDefensor2,true,true,0);
	}
	
	hBox.pack_start(vAtacante,true,true,0);
	hBox.pack_start(vs1,true,true,30);
	hBox.pack_start(vDefensor,true,true,0);
	
	dialog.get_vbox()->pack_start(hBox);
	dialog.get_vbox()->pack_start(hs6,true,true,10);
	
	dialog.add_button("OK", 0);
	
	dialog.show_all();
	int r = dialog.run();
	dialog.hide();
	return r;
}

string MsgDadosResultantes :: dadoSeleccionado(int i){
	
	switch(i){
	
	case 1 : return PACKAGE_DATA_DIR"/riskclient/images/1.gif";
	case 2 : return PACKAGE_DATA_DIR"/riskclient/images/2.gif";
	case 3 : return PACKAGE_DATA_DIR"/riskclient/images/3.gif";
	case 4 : return PACKAGE_DATA_DIR"/riskclient/images/4.gif";
	case 5 : return PACKAGE_DATA_DIR"/riskclient/images/5.gif";
	case 6 : return PACKAGE_DATA_DIR"/riskclient/images/6.gif";
	default: return "0";
	
	}
}


MsgDadosResultantes::~MsgDadosResultantes()
{
}
